/*
 * @Author: 橘子
 * @Date: 2023/6/1
 * @Project_description: 编辑器配置
 * @Description: 代码是我抄的，不会也是真的
 */
'use strict'
import cookies from '@/libs/util.cookies'
import setting from '@/setting'
import { Message } from 'element-ui'

/**
 * @Description:  自定义alert方法，用于替换默认的alert弹窗
 * @author 橘子
 * @date 2023/6/1
 */
const customAlert = (t, s) => {
  switch (t) {
    case 'success':
      Message.success(s)
      break
    case 'info':
      Message.info(s)
      break
    case 'warning':
      Message.warning(s)
      break
    case 'error':
      Message.error(s)
      break
    default:
      Message.info(s)
      break
  }
}
/**
 * @Description: 编辑器配置
 * @author 橘子
 * @date 2023/6/1
 */
export const editorConfig = {
  customAlert: customAlert, //自定义alert方法，用于替换默认的alert弹窗
  //“下载附件”菜单
  //https://github.com/wangeditor-team/wangEditor-plugin-upload-attachment
  hoverbarKeys: {
    attachment: {
      menuKeys: ['downloadAttachment'], // “下载附件”菜单
    },
    // 在编辑器中，选中链接文本时，要弹出的菜单
    link: {
      menuKeys: [
        'editLink',
        'unLink',
        'viewLink', // 默认的配置可以通过 `editor.getConfig().hoverbarKeys.link` 获取
        'convertToLinkCard', // 增加 '转为链接卡片'菜单
      ],
    },
  },
  //按钮配置
  MENU_CONF: {
    //https://www.wangeditor.com/v5/menu-config.html#%E9%A2%9C%E8%89%B2
    codeSelectLang: {
      // 代码语言
      codeLangs: [
        { text: 'css', value: 'css' },
        { text: 'html', value: 'html' },
        { text: 'vue', value: 'vue' },
        { text: 'javascript', value: 'javascript' },
        { text: 'typescript', value: 'typescript' },
        { text: 'sh', value: 'sh' },
        // 其他
      ],
    },
    // // 配置“图片”菜单
    uploadImage: {
      server: setting.appInfo.uploadUrl,
      fieldName: setting.upload.uploadFileName,
      // 单个文件的最大体积限制，默认为 2M
      maxFileSize: setting.upload.maxFileSize * 1024 * 1024, // 1M
      // 最多可上传几个文件，默认为 100
      maxNumberOfFiles: 1,
      // 选择文件时的类型限制，默认为 ['image/*'] 。如不想限制，则设置为 []
      allowedFileTypes: ['image/*'],
      // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
      meta: {},
      // 将 meta 拼接到 url 参数中，默认 false
      metaWithUrl: false,
      // 自定义增加 http  header
      headers: {
        token: cookies.get('token'),
      },
      // 跨域是否传递 cookie ，默认为 false
      withCredentials: false,
      //小于该值就插入 base64 格式（而不上传），默认为 0
      base64LimitSize: 5 * 1024, // 5kb
      // 超时时间，默认为 10 秒
      timeout: setting.axiosConfig.timeout,
      // 自定义成功
      customInsert(res, insertFn) {
        if (res.code !== setting.axiosConfig.successCode) {
          Message.error(res.msg)
          return
        }
        insertFn(res.data[setting.upload.resFileName], '', res.data[setting.upload.resFileName])
      },
    },
    // “上传附件”菜单的配置
    uploadAttachment: {
      server: setting.appInfo.uploadUrl,
      fieldName: setting.upload.uploadFileName,
      // 单个文件的最大体积限制，默认为 2M
      maxFileSize: setting.upload.maxFileSize * 1024 * 1024, // 1M
      // 最多可上传几个文件，默认为 100
      maxNumberOfFiles: 10,
      // 选择文件时的类型限制，默认为 ['image/*'] 。如不想限制，则设置为 []
      allowedFileTypes: ['image/*'],
      // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
      meta: {},
      // 将 meta 拼接到 url 参数中，默认 false
      metaWithUrl: false,
      // 自定义增加 http  header
      headers: {
        token: cookies.get('token'),
      },
      // 跨域是否传递 cookie ，默认为 false
      withCredentials: false,
      //小于该值就插入 base64 格式（而不上传），默认为 0
      base64LimitSize: 5 * 1024, // 5kb
      // 超时时间，默认为 10 秒
      timeout: setting.axiosConfig.timeout,

      // 上传成功后，用户自定义插入文件
      customInsert(res, file, insertFn) {
        if (res.code !== setting.axiosConfig.successCode) {
          Message.error(res.msg)
          return
        }
        // 插入附件到编辑器
        insertFn(file.name, res.data[setting.upload.resFileName])
      },
    },
    // “插入视频”菜单的配置
    uploadVideo: {
      server: setting.appInfo.uploadUrl,
      fieldName: setting.upload.uploadFileName,
      maxFileSize: setting.upload.maxFileSize * 1024 * 1024, // 5
      // 最多可上传几个文件，默认为 100
      maxNumberOfFiles: 10,
      allowedFileTypes: ['video/*'],
      // 自定义上传参数，例如传递验证的 token 等。参数会被添加到 formData 中，一起上传到服务端。
      meta: {},
      // 将 meta 拼接到 url 参数中，默认 false
      metaWithUrl: false,
      // 自定义增加 http  header
      headers: {
        token: cookies.get('token'),
      },
      // 跨域是否传递 cookie ，默认为 false
      withCredentials: false,
      // 超时时间，默认为 10 秒
      timeout: setting.axiosConfig.timeout,
      // 上传成功后，用户自定义插入文件
      customInsert(res, insertFn) {
        if (res.code !== setting.axiosConfig.successCode) {
          Message.error(res.msg)
          return
        }
        // 插入视频到编辑器,第二个值是封面
        insertFn(res.data[setting.upload.resFileName], '')
      },
      //例如你有自己的图床，或者视频文件选择器。可以通过 customBrowseAndUpload 来自己实现选择视频、上传视频，并插入视频。
      // customBrowseAndUpload
    },
  },
  // maxlength: 1000000, //配置编辑器最大允许的字符数
  // onMaxLength:(editor)=>{} // 当达到 maxlength 限制时，触发该回调函数
  // customPaste:(editor,event)=>{    // 阻止默认的粘贴行为
  //     event.preventDefault()
  //     return false}, 自定义粘贴。可阻止编辑器的默认粘贴，实现自己的粘贴逻辑。
}
/**
 * @Description: 菜单栏配置
 * @author 橘子
 * @date https://www.wangeditor.com/v5/toolbar-config.html#excludekeys
 */
export const toolbarConfig = {
  // toolbarKeys:[] 重新配置工具栏，显示哪些菜单，以及菜单的排序、分组。
  //  toolbarKeys:[], //自定义扩展的菜单
  excludeKeys: ['|'], //排除的菜单
  insertKeys: {
    index: 22, // 自定义插入的位置
    //,'uploadImageList'
    keys: ['uploadAttachment'], // “上传附件”菜单
  }, //插入菜单
}
